import config from "../../config/config";
import role from "../../config/role";
import Server from "../../config/server";
Page({
  data: {
    onLoad: false,
    Server: null, // 服务端
    gameMessage: JSON.parse(JSON.stringify(config.gameMessage)), // 游戏数据
    pageTopHeight: wx.getWindowInfo().statusBarHeight, // 顶部高度
    gameStateDescribe: config.gameStateDescribe,
    //-----------------------------------------------------
    // 法官按钮状态
    setTimeBtn: 3, // (防误触3秒内)
    setIntervalBtn: null,
    btnStatus: 1,
    btnMask: false,
    // 游戏卡片状态
    gameStateCard: 0, 
    // 弹窗状态
    modalCole: 0,
    // 被选择的玩家
    selectObj: {},
    // 女巫用户点击的是毒还是救
    witchtype: 0, // 1毒 2救
    // 自己的游戏数据
    ownGameMessage: {},
    // 历史数据
    historyMessage: [], // d天 有o就是投票 u被淘汰的人
    // 可以被投票的玩家
    canGameVote:[],
    // 淘汰的人
    knockOut:[],
    // 已选角色 [{name: numerber: }]
    roleAndCount:[],
    count:0, userCount:0, lineCount:0, liveCount:0,
    // 倒计时时间
    progressTime: 3, 
    // 倒计时百分比
    progressPercent: 100,
    
    operated: 0, //0 禁止操作  1.可操作 2.被操作  3.弃权
     // 是否是分享状态
    share: false,
    // 设置专用  是否展示
    hasWolf: false,
    hasWitch: false,
    hasGuard: false,
    hasProphet: false,
    // 游戏设置
    gameSet: false,

    // 游戏设置对象
    setTimeObj:{
      wolf_time: 3,
      witch_time: 3,
      guard_time: 3,
      prophet_time: 3
    },

  },

  onLoad(option) {
    this.setData({
      onLoad: true,
    });

    if(option.room){
      // 新创建
      const JSONStr = option.room;
      const partIn = option.partIn; // 是否参与游戏
      const role = JSON.parse(JSONStr);
      const data = new Map(role);
      if (this.data.Server) {
        this.data.Server.destroy();
      }
      this.createRoom(data, partIn);
    }
    //  else {
    //   // 直接返回房间
    //   const gameMessage = wx.getStorageSync("gameMessage");
    //   const hours = 1000 * 60 * 60;
    //   // 1小时过后失效
    //   if(gameMessage && gameMessage.gameOutTime && Date.now() - gameMessage.gameOutTime < (hours * 1)){
    //     if (this.data.Server) {
    //       this.data.Server.destroy();
    //     }
    //     this.setData({
    //        Server: new Server(this),
    //     });
    //     this.data.Server.gameMessage = gameMessage;
    //     this.data.Server.startBackGame();
    //   }else{
    //     getApp().globalData.showToastTitle = "房间已失效";
    //     wx.redirectTo({ url: '/pages/home/home' });
    //     return;
    //   }
    // }
    // 手机常亮
    wx.setKeepScreenOn({ keepScreenOn: true });
    // ios 静音也播放
    wx.setInnerAudioOption({ obeyMuteSwitch: false });
    this.proxyNetWork()
    console.log('onLoad===========')
  },
  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
    // 在游戏房间内冒泡
    if(this.data.share){
      this.setData({ share: false })
      return;
    }
    if (!this.data.onLoad) {
      // 直接返回房间
      const gameMessage = wx.getStorageSync("gameMessage");
      const hours = 1000 * 60 * 60;
      // 1小时过后失效
      if(gameMessage && gameMessage.gameOutTime && Date.now() - gameMessage.gameOutTime < (hours * 1)){
        if (this.data.Server) {
          console.log('destroy1111111===========')
          this.data.Server.destroy();
        }
        this.setData({
           Server: new Server(this),
        });
        this.data.Server.gameMessage = gameMessage;
        this.data.Server.startBackGame();
      } else {
        getApp().globalData.showToastTitle = "房间已失效";
        const pages = getCurrentPages();
        const routeStackLength = pages.length;
        routeStackLength > 1 ? wx.navigateBack({ delta: 2}) : wx.redirectTo({ url: '/pages/home/home' })
        return;
      }
    }
    this.setData({ onLoad: false });
    console.log('onShow===========')
  },
  /**
   * 生命周期函数--监听页面隐藏 客户端离开房间
   */
  onHide() {
    if (this.data.Server && !this.data.share) {
      this.data.Server.beRightBack();
    }
    console.log('onHide===========')
  },
  // 监听网络变化 清理数据重新开始
  proxyNetWork(){
    const _this = this;
    const app = getApp();
    app.netWork.netWorkCallback((networkObject) => {
        if(_this.data.Server){
            if (_this.data.Server.netHost === '0') {
              // 初始化
               if(networkObject.ip && networkObject.ip.indexOf(".") !== -1){
                _this.data.Server.netHost = networkObject.ip
               }
            } else {
              if(_this.data.Server.netHost !== networkObject.ip){
                // 您的网络有变化可能导致游戏断开
                wx.showToast({ title: "您的网络有变化可能导致游戏断开", icon: "none", duration: 3000 })
              }
            }
        }
    });
  },
  // 销毁
  onUnload () {
    if (this.data.Server) {
      // 告诉 其他人 法官离开
      this.data.Server.closeGameDirect();
    }
    // 手机常亮
    wx.setKeepScreenOn({ keepScreenOn: false });
    console.log('onUnload===========')
  },
  // 查看图标说明
  seeIcon(e){
    wx.showToast({
      title: e.currentTarget.dataset.mes,
      icon: "none",
      duration: 3000,
    });
  },
  // 查看自己身份
  seeMeStyle(e){
    if(e.currentTarget.dataset.type === '1'){
      this.setData({ modalCole: 17 });
    }
  },
  // 更新用户信息
  setUserInfo() {
    this.data.Server.upDataUserInfo();
  },

  // 点击继续游戏
  continueGame() {
    this.data.Server.continueGame();
  },
  peepatNo() {
    this.setData({ peepatState: false });
  },
  peepatOk() {
    this.setData({ peepatState: true });
  },
  // 防止误触
  setMainStatus(state){
    const this_ = this
    this_.setData({ btnStatus:state, btnMask: true })
    if(state !== 0){
      this_.setData({ setIntervalBtn: setInterval(
        () => {
          const setTimeBtn = this_.data.setTimeBtn - 1
          if(setTimeBtn === 0){
            clearInterval(this_.data.setIntervalBtn)
            this_.setData({ setIntervalBtn: null,btnMask: false, setTimeBtn: 3 })
          } else {
            this_.setData({ setTimeBtn: setTimeBtn })
          }
          console.log(setTimeBtn)
        },1000) 
      })
    }
  },

  // 查看角色
  seePart() {
    wx.showToast({
      title: this.data.Server.ownGameMessage.name,
      icon: "none",
      duration: 3000,
    });
  },

  // ---------------- 弹窗 start----------------------
  // 查看关闭
  seeClose() {
    this.setData({ modalCole: 0, operated: 0, gameStateCard: 0, selectObj:{} });
  },
  // 关闭弹窗
  close() {
    this.setData({ modalCole: 0 });
  },
  giveUp() {
    this.setData({ modalCole: 5 });
  },
  // 解散房间 确认
  closeGame() {
    this.setData({ modalCole: 0 });
    this.data.Server.closeGame();
  },
  // 放弃营救
  pluckUp(){
    if(this.data.gameMessage.witchKill){
      this.setData({ witchtype: 1 });
      // 更新击杀列表
      this.data.Server.setCanGameVote()
    } else {
      // 走放弃
      this.setData({ operated: 3 });
      this.giveUpOk()
    }
  },
  // 营救
  pluck(){
    this.data.gameMessage.players.forEach((item) => {
      if (item.ip === this.data.gameMessage.WKU) {
        this.setData({ selectObj: item, witchtype: 2 });
      }
    });
    this.data.Server.selectOk();
  },
  // 角色选择 操作
  selectGameUser(element){
    const selectObj = element.currentTarget.dataset.item;
    if(this.data.witchtype !== 2){
      this.setData({ selectObj });
    }
  },
  // 确认操作
  selectOk() {
    this.data.Server.selectOk();
  },
  // 确认放弃操作
  giveUpOk() {
    if(this.data.gameStateCard === 5){
      this.giveUpHunterOk()
    }else{
      this.data.Server.giveUpOk();
    }
  },
    // 猎人放弃
  giveUpHunterOk() {
    this.data.Server.giveUpHunterOk()
  },
  // 关闭技能弹窗
  closeGameState() {
    this.data.Server.closeGameState();
  },
  // 打开投票弹窗
  goVote() {
    this.data.Server.gameMessage.gameState = 105
    this.data.Server.gameMessage = this.data.Server.gameMessage
    this.data.Server.livePermitOperated()
    this.data.Server.setCanGameVote()
    this.setData({ modalCole: 0, operated: 1, gameStateCard: 105 });
  },
  // 去带人
  goHunter() {
    this.setData({ modalCole: 0, operated: 1, gameStateCard: 5 });
    this.data.Server.gameMessage.gameState = 5
    this.data.Server.gameMessage = this.data.Server.gameMessage
  },
  // 网络变化重置游戏
  resetGameNet() {
    this.data.Server.resetGameNet()
  },
  // 网络变化退出游戏
  exitGameNet() {
    this.data.Server.exitGameNet()
  },
  // ---------------- 弹窗 end----------------------
  // ----------------------------------- 设置页面 -----------------------------------

  // 点击设置游戏
  setGameTap(){
    console.log(6666)
    const setTimeObj = {
      wolf_time: this.data.gameMessage.wolf_time,
      witch_time: this.data.gameMessage.witch_time,
      guard_time: this.data.gameMessage.guard_time,
      prophet_time: this.data.gameMessage.prophet_time
    }
    this.setData({ 
      gameSet: true,
      setTimeObj
    });
  },
  // 游戏设置取消
  gameSetClose(e) { 
    this.setData({ gameSet: false });
  },
  // 设置内容时间
  setContentTime(e){
    const type = e.currentTarget.dataset.type;
    const setTimeObj = this.data.setTimeObj;
    setTimeObj[type] = e.detail.value;
    this.setData({ setTimeObj })
  },
  // 游戏设置确定
  gameSetOk() {
    const setTimeObj = this.data.setTimeObj;
    let status = false;
    Object.keys(setTimeObj).forEach(key => {
        setTimeObj[key] = parseInt(setTimeObj[key])
        console.log(setTimeObj[key])
        if(setTimeObj[key] < 3 || isNaN(setTimeObj[key])){
          wx.showToast({
            title: '时间最小为3秒',
            icon: 'none',
          });
          status = true;
        }
    })
    if(status) return;
    if(this.data.Server){
      this.data.Server.gameMessage = {...this.data.Server.gameMessage,...setTimeObj};
      this.data.Server.setGameTime()
    }
    this.setData({ gameSet: false });
  },
  // ----------------------------------- 法官 操作-----------------------------------
  // 创建房间
  createRoom(val, partIn) {
    this.setData({
      Server: new Server(this),
    });
    let list = [];
    val.forEach((value, key) => {
      const element = role.find((res) => res.code === +key);
      new Array(value).fill("").forEach(() => {
        list.push(JSON.parse(JSON.stringify(element)));
      });
    });
    this.data.Server.createGame(partIn, list);
  },

  // 解散房间
  goPage() {
    this.setData({
      modalCole: 6,
    });
  },

  // 角色分发
  issuePart() {
    this.data.Server.issuePart();
  },

  // 进入黑夜
  startGame() {
    this.data.Server.startGame();
  },

  // 开始投票
  startVote() {
    this.data.Server.startVote();
  },

  // 投票统计
  endVote() {
    this.data.Server.endVote();
  },

  // 重新开始游戏（再来一局）
  resetPart() {
    this.data.Server.resetPart();
  },

  // 分享转发
  onShareAppMessage() {
    this.setData({ share: true })
    // const promise = new Promise((resolve) => {
    //   setTimeout(() => {
    //     resolve({
    //       title: "速来抓狼，就差你了",
    //     });
    //   }, 2000);
    // });
    return {
      title: "速来抓狼，就差你了",
      path: `/pages/cRoom/cRoom?ip=${this.data.gameMessage.gameIp || ""}`,
      // promise,
    };
  },
});
